Fork me on GitHub

枚举

注意:所有文章除特别说明外,转载请注明出处.

概念

在JDK1.5之前,在定义常量的时候都是:public static final,然后现在可以将相关的常量分组到一个枚举类中,同时枚举量比常量方便多了,提供更多的方法。

使用方法

1.常量

public enum Color{
    RED,GREEN,BLANK,YELLOW
}

2.switch

enum Signal{
    GREEN,YELLOW,RED
}
public class TLight{
    Signal color = Signal.RED;
    public void change(){
        switch(color){
            case RED:
                color = Signal.GREEN;
                break;
            case YELLOW:
                color = Signal.RED;
                break;
            case GREEN:
                color = Signal.YELLOW;
                break;
        }
    }
}

3.向枚举中添加新方法

这里如果需要定义新的方法,那么需要在enum实例序列的最后添加一个分号,同时需要先定义enum实例。

public enum Color{
    RED("红色",1),GREEN("绿色",2),BLANK("白色",3),YELLOW("黄色",4);

    //定义成员变量
    private String cname;
    private int index;
    //构造方法
    private Color(String cname, int index){
        this.cname = cname;
        this.index = index;
    }

    //普通方法
    public static String getCname(int index){
        for(Color c:color.values()){
            if(c.getIndex() == index){
                return c.cname;
            }
        }
        return null;
    }

    //get/set
    public String ...
}

4.覆盖枚举的方法

public class Test {
    public enum Color {
        RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
        // 成员变量
        private String name;
        private int index;

        // 构造方法
        private Color(String name, int index) {
            this.name = name;
            this.index = index;
        }

        // 覆盖方法
        @Override
        public String toString() {
            return this.index + "_" + this.name;
        }
    }

    public static void main(String[] args) {
        System.out.println(Color.RED.toString());
    }
}

5.实现接口

枚举都是继承java.lang.Enum类,同时因为Java不支持多继承,所以枚举对象不能再继承其它类。

public interface Behaviour {
    void print();

    String getInfo();
    }

    public enum Color implements Behaviour {
        RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色",4);
        // 成员变量
        private String name;
        private int index;

        // 构造方法
        private Color(String name, int index) {
            this.name = name;
            this.index = index;
        }

        // 接口方法

        @Override
        public String getInfo() {
            return this.name;
        }

        // 接口方法
        @Override
        public void print() {
            System.out.println(this.index + ":" + this.name);
        }
}

6.使用接口组织枚举

public interface Food {
    enum Coffee implements Food {
        BLACK_COFFEE, DECAF_COFFEE, LATTE, CAPPUCCINO
    }

    enum Dessert implements Food {
        FRUIT, CAKE, GELATO
    }
}

7.枚举集合

java.util.EnumSetjava.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的keyenum类型,而value则可以是任意类型。

注意:枚举类型都是Enum类的子类,其继承了Enum类的方法,如toString()方法,这方法能够返回枚举常量名。

本文标题:枚举

文章作者:Bangjin-Hu

发布时间:2019年10月15日 - 09:22:26

最后更新:2020年03月30日 - 08:10:29

原始链接:http://bangjinhu.github.io/undefined/Java 枚举/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

Bangjin-Hu wechat
欢迎扫码关注微信公众号,订阅我的微信公众号.
坚持原创技术分享,您的支持是我创作的动力.